
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何在 ES中进行索引设计以优化查询性能？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何在 ES中进行索引设计以优化查询性能？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">优化</div>
          <div class="card-question">在Elasticsearch中，设置分片数量时有什么通用建议？分片过多或过少分别会带来什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">优化</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">通常建议分片数量不超过集群中节点的数量的两倍。过多的分片会导致资源浪费，而过少的分片则会限制并行查询的能力。</div>
          </div>
          <div class="card-source">来源: 1. 合理选择分片和副本数量</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">在Elasticsearch的索引映射（Mapping）中，对于不需要进行全文搜索的字段，为什么推荐使用 `keyword` 类型而不是 `text` 类型？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为使用适合的数据类型（如为非全文搜索字段选择 `keyword`）有助于优化索引和查询性能。</div>
          </div>
          <div class="card-source">来源: 2. 使用合适的索引映射（Mapping）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Elasticsearch中的 `doc_values` 主要用于什么场景？它对性能有何影响？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`doc_values` 主要用于需要进行聚合操作（如统计、排序等）的字段。启用 `doc_values` 可以提高聚合和排序的性能。</div>
          </div>
          <div class="card-source">来源: 2. 使用合适的索引映射（Mapping）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">对于日志或监控这类时间序列数据，文档推荐采用哪种索引策略？这种策略有哪些好处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">建议按时间分段创建索引（例如，每天或每周一个索引）。这样做可以更好地管理数据生命周期、提高查询性能，并减少资源消耗。</div>
          </div>
          <div class="card-source">来源: 3. 设计合理的索引策略</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">`term` 查询和 `match` 查询在Elasticsearch中的核心区别是什么？应该如何根据场景选择？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`term` 查询用于精确匹配，它直接在倒排索引中查找未被分词的精确词条。而 `match` 查询会对输入文本进行分词处理，适用于全文搜索场景。</div>
          </div>
          <div class="card-source">来源: 5. 使用适当的查询类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">优化</div>
          <div class="card-question">为什么在复杂的查询中推荐使用 `filter` 子句进行预过滤？它在性能上有何优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">优化</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为过滤操作不需要计算相关性，性能更高。此外，`filter` 子句的结果会被缓存，这可以显著提高重复查询的效率。</div>
          </div>
          <div class="card-source">来源: 5. 使用适当的查询类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">优化</div>
          <div class="card-question">在配置Elasticsearch集群硬件时，关于JVM堆大小的设置有哪些关键建议？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">优化</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">建议为Elasticsearch分配的JVM堆大小设置为物理内存的一半，但通常不超过32GB。这有助于提高性能和稳定性。</div>
          </div>
          <div class="card-source">来源: 7. 优化集群的硬件配置</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何利用索引别名（Alias）来提升查询的灵活性和管理效率？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">使用别名可以动态管理和切换索引。例如，别名可以用于同时查询多个索引，或者在不影响客户端应用的情况下无缝切换到新的索引。</div>
          </div>
          <div class="card-source">来源: 11. 使用别名（Alias）进行灵活的查询管理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Elasticsearch的索引生命周期管理（ILM）功能如何帮助实现数据的自动化管理和成本优化？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">ILM策略可以自动化数据的冷热分层管理。例如，将新数据存放在性能较高的热节点上，随着数据变旧，自动将其转移到性能和成本都较低的冷节点上，从而减少存储成本并优化查询性能。</div>
          </div>
          <div class="card-source">来源: 12. 利用 Elasticsearch 的生命周期管理（ILM）</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
